home *** CD-ROM | disk | FTP | other *** search
/ Aminet 48 / Aminet 48 (2002)(GTI - Schatztruhe)[!][Apr 2002].iso / Aminet / text / edit / vim60src.lha / Vim / vim60 / src / vim.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-09-19  |  51.3 KB  |  1,638 lines

  1. /* vi:set ts=8 sts=4 sw=4:
  2.  *
  3.  * VIM - Vi IMproved    by Bram Moolenaar
  4.  *
  5.  * Do ":help uganda"  in Vim to read copying and usage conditions.
  6.  * Do ":help credits" in Vim to see a list of people who contributed.
  7.  */
  8.  
  9. #ifndef VIM__H
  10. # define VIM__H
  11.  
  12. /* use fastcall for Borland, when compiling for Win32 (not for DOS16) */
  13. #if defined(__BORLANDC__) && defined(WIN32) && !defined(DEBUG)
  14. #if defined(FEAT_PERL) || \
  15.     defined(FEAT_PYTHON) || \
  16.     defined(FEAT_RUBY) || \
  17.     defined(FEAT_TCL) || \
  18.     defined(DYNAMIC_GETTEXT) || \
  19.     defined(DYNAMIC_ICONV) || \
  20.     defined(DYNAMIC_IME)
  21. #  pragma option -pc
  22. # else
  23. #  pragma option -pr
  24. # endif
  25. #endif
  26.  
  27. /* ============ the header file puzzle (ca. 50-100 pieces) ========= */
  28.  
  29. #ifdef HAVE_CONFIG_H    /* GNU autoconf (or something else) was here */
  30. # include "auto/config.h"
  31. # define HAVE_PATHDEF
  32.  
  33. /*
  34.  * Check if configure correcly managed to find sizeof(int).  If this failed,
  35.  * it becomes zero.  This is likely a problem of not being able to run the
  36.  * test program.  Other items from configure may also be wrong then!
  37.  */
  38. # if (SIZEOF_INT == 0)
  39.     Error: configure did not run properly.  Check auto/config.log.
  40. # endif
  41.  
  42. /*
  43.  * Cygwin may have fchdir() in a newer rleease, but in most versions it
  44.  * doesn't work well and avoiding it keeps the binary backward compatible.
  45.  */
  46. # if defined(__CYGWIN32__) && defined(HAVE_FCHDIR)
  47. #  undef HAVE_FCHDIR
  48. # endif
  49. #endif
  50.  
  51. #ifdef __EMX__        /* hand-edited config.h for OS/2 with EMX */
  52. # include "os_os2_cfg.h"
  53. #endif
  54.  
  55. /*
  56.  * MACOS_CLASSIC compiling for MacOS prior to MacOS X
  57.  * MACOS_X_UNIX  compiling for MacOS X (using os_unix.c)
  58.  * MACOS_X       compiling for MacOS X (using os_unix.c or os_mac.c)
  59.  * MACOS     compiling for either one
  60.  */
  61. #if defined(macintosh) && !defined(MACOS_CLASSIC)
  62. #  define MACOS_CLASSIC
  63. #endif
  64. #if defined(MACOS_X_UNIX)
  65. #  define MACOS_X
  66. #endif
  67. #if defined(MACOS_X) || defined(MACOS_CLASSIC)
  68. #  define MACOS
  69. #endif
  70. #if defined(MACOS_X) && defined(MACOS_CLASSIC)
  71.     Error: To compile for both MACOS X and Classic use a Classic Carbon
  72. #endif
  73.  
  74.  
  75. #if defined(MACOS)
  76. # define FEAT_GUI_MAC
  77. #endif
  78. #if defined(FEAT_GUI_MOTIF) \
  79.     || defined(FEAT_GUI_GTK) \
  80.     || defined(FEAT_GUI_ATHENA) \
  81.     || defined(FEAT_GUI_MAC) \
  82.     || defined(FEAT_GUI_W32) \
  83.     || defined(FEAT_GUI_W16) \
  84.     || defined(FEAT_GUI_BEOS) \
  85.     || defined(FEAT_GUI_AMIGA) \
  86.     || defined(FEAT_GUI_PHOTON)
  87. # ifndef FEAT_GUI
  88. #  define FEAT_GUI
  89. # endif
  90. #endif
  91.  
  92. #if defined(FEAT_GUI_W32) || defined(FEAT_GUI_W16)
  93. # define FEAT_GUI_MSWIN
  94. #endif
  95. #if defined(WIN16) || defined(WIN32) || defined(_WIN64)
  96. # define MSWIN
  97. #endif
  98. /* Practically everything is common to both Win32 and Win64 */
  99. #if defined(WIN32) || defined(_WIN64)
  100. # define WIN3264
  101. #endif
  102.  
  103. /*
  104.  * SIZEOF_INT is used in feature.h, and the system-specific included files
  105.  * need items from feature.h.  Therefore define SIZEOF_INT here.
  106.  */
  107. #ifdef WIN3264
  108. # define SIZEOF_INT 4
  109. #endif
  110. #ifdef MSDOS
  111. # ifdef DJGPP
  112. #  ifndef FEAT_GUI_GTK        /* avoid problems when generating prototypes */
  113. #   define SIZEOF_INT 4        /* 32 bit ints */
  114. #  endif
  115. #  define DOS32
  116. #  define FEAT_CLIPBOARD
  117. # else
  118. #  ifndef FEAT_GUI_GTK        /* avoid problems when generating prototypes */
  119. #   define SIZEOF_INT 2        /* 16 bit ints */
  120. #  endif
  121. #  define SMALL_MALLOC        /* 16 bit storage allocation */
  122. #  define DOS16
  123. # endif
  124. #endif
  125.  
  126. #ifdef AMIGA
  127.   /* Be conservative about sizeof(int). It could be 4 too. */
  128. # ifndef FEAT_GUI_GTK    /* avoid problems when generating prototypes */
  129. #  define SIZEOF_INT    2
  130. # endif
  131. #endif
  132. #ifdef MACOS
  133. # if defined(__POWERPC__) || defined(__fourbyteints__) \
  134.   || defined(__MRC__) || defined(__SC__) || defined(__APPLE_CC__)/* MPW Compilers */
  135. #  define SIZEOF_INT 4
  136. # else
  137. #  define SIZEOF_INT 2
  138. # endif
  139. #endif
  140. #ifdef RISCOS
  141. # define SIZEOF_INT 4
  142. #endif
  143.  
  144.  
  145. #include "feature.h"    /* #defines for optionals and features */
  146.  
  147. /* +x11 is only enabled when it's both available and wanted. */
  148. #if defined(HAVE_X11) && defined(WANT_X11)
  149. # define FEAT_X11
  150. #endif
  151.  
  152. /* Can't use "PACKAGE" here, conflicts with a Perl include file. */
  153. #ifndef VIMPACKAGE
  154. # define VIMPACKAGE    "vim"
  155. #endif
  156.  
  157. /*
  158.  * Find out if function definitions should include argument types
  159.  */
  160. #ifdef AZTEC_C
  161. # include <functions.h>
  162. # define __ARGS(x)  x
  163. #endif
  164.  
  165. #ifdef SASC
  166. # include <clib/exec_protos.h>
  167. # define __ARGS(x)  x
  168. #endif
  169.  
  170. #ifdef _DCC
  171. # include <clib/exec_protos.h>
  172. # define __ARGS(x)  x
  173. #endif
  174.  
  175. #ifdef __TURBOC__
  176. # define __ARGS(x) x
  177. #endif
  178.  
  179. #ifdef __BEOS__
  180. # include "os_beos.h"
  181. # define __ARGS(x)  x
  182. #endif
  183.  
  184. #if defined(UNIX) || defined(__EMX__) || defined(VMS)
  185. # include "os_unix.h"        /* bring lots of system header files */
  186. #endif
  187.  
  188. #if defined(MACOS) && (defined(__MRC__) || defined(__SC__))
  189.    /* Apple's Compilers support prototypes */
  190. # define __ARGS(x) x
  191. #endif
  192. #ifndef __ARGS
  193. # if defined(__STDC__) || defined(__GNUC__) || defined(WIN3264)
  194. #  define __ARGS(x) x
  195. # else
  196. #  define __ARGS(x) ()
  197. # endif
  198. #endif
  199.  
  200. /* __ARGS and __PARMS are the same thing. */
  201. #ifndef __PARMS
  202. # define __PARMS(x) __ARGS(x)
  203. #endif
  204.  
  205. #ifdef UNIX
  206. # include "auto/osdef.h"    /* bring missing declarations in */
  207. #endif
  208.  
  209. #ifdef __EMX__
  210. # define    getcwd  _getcwd2
  211. # define    chdir   _chdir2
  212. # undef        CHECK_INODE
  213. #endif
  214.  
  215. #ifdef AMIGA
  216. # include "os_amiga.h"
  217. #endif
  218.  
  219. #ifdef MSDOS
  220. # include "os_msdos.h"
  221. #endif
  222.  
  223. #ifdef WIN16
  224. # include "os_win16.h"
  225. #endif
  226.  
  227. #ifdef WIN3264
  228. # include "os_win32.h"
  229. #endif
  230.  
  231. #ifdef __MINT__
  232. # include "os_mint.h"
  233. #endif
  234.  
  235. #if defined(MACOS)
  236. # if defined(__MRC__) || defined(__SC__) /* MPW Compilers */
  237. #  define HAVE_SETENV
  238. # endif
  239. # include "os_mac.h"
  240. #endif
  241.  
  242. #ifdef RISCOS
  243. # include "os_riscos.h"
  244. #endif
  245.  
  246. #ifdef __QNX__
  247. # include "os_qnx.h"
  248. #endif
  249.  
  250. #ifdef FEAT_SUN_WORKSHOP
  251. # include "workshop.h"
  252. #endif
  253.  
  254. #ifdef X_LOCALE
  255. # include <X11/Xlocale.h>
  256. #else
  257. # ifdef HAVE_LOCALE_H
  258. #  include <locale.h>
  259. # endif
  260. #endif
  261.  
  262. /*
  263.  * Maximum length of a path (for non-unix systems) Make it a bit long, to stay
  264.  * on the safe side.  But not too long to put on the stack.
  265.  */
  266. #ifndef MAXPATHL
  267. # ifdef MAXPATHLEN
  268. #  define MAXPATHL  MAXPATHLEN
  269. # else
  270. #  define MAXPATHL  256
  271. # endif
  272. #endif
  273. #ifdef BACKSLASH_IN_FILENAME
  274. # define PATH_ESC_CHARS ((char_u *)" *?[{`%#")
  275. #else
  276. # ifdef COLON_AS_PATHSEP
  277. #  define PATH_ESC_CHARS ((char_u *)" *?[{`$%#/")
  278. # else
  279. #  define PATH_ESC_CHARS ((char_u *)" *?[{`$\\%#'\"|")
  280. # endif
  281. #endif
  282.  
  283. #define NUMBUFLEN 30        /* length of a buffer to store a number in ASCII */
  284.  
  285. /*
  286.  * Shorthand for unsigned variables. Many systems, but not all, have u_char
  287.  * already defined, so we use char_u to avoid trouble.
  288.  */
  289. typedef unsigned char    char_u;
  290. typedef unsigned short    short_u;
  291. typedef unsigned int    int_u;
  292. /* Make sure long_u is big enough to hold a pointer.  On Win64 longs are 32
  293.  * bit and pointers 64 bit. */
  294. #ifdef _WIN64
  295. typedef unsigned __int64 long_u;
  296. #else
  297. typedef unsigned long    long_u;
  298. #endif
  299.  
  300. /*
  301.  * The characters and attributes cached for the screen.
  302.  * Currently a single byte.  The attributes may become larger some day.
  303.  */
  304. #define schar_T    char_u
  305. #define sattr_T    char_u
  306.  
  307. /*
  308.  * The u8char_T can hold one decoded UTF-8 character.
  309.  * Vim always use an int (32 bits) for characters most places, so that we can
  310.  * handle 32 bit characters in the file.  u8char_T is only used for
  311.  * displaying.  That should be enough, because there is no font for > 16 bits.
  312.  */
  313. #ifdef FEAT_MBYTE
  314. typedef unsigned short u8char_T;
  315. #endif
  316.  
  317. #ifndef UNIX            /* For Unix this is included in os_unix.h */
  318. # include <stdio.h>
  319. # include <ctype.h>
  320. #endif
  321.  
  322. #include "ascii.h"
  323. #include "keymap.h"
  324. #include "term.h"
  325. #include "macros.h"
  326.  
  327. #ifdef LATTICE
  328. # include <sys/types.h>
  329. # include <sys/stat.h>
  330. #endif
  331. #ifdef _DCC
  332. # include <sys/stat.h>
  333. #endif
  334. #if defined(MSDOS) || defined(MSWIN)
  335. # include <sys/stat.h>
  336. #endif
  337.  
  338. /*
  339.  * Allow other (non-unix) systems to configure themselves now
  340.  * These are also in os_unix.h, because osdef.sh needs them there.
  341.  */
  342. #ifndef UNIX
  343. /* Note: Some systems need both string.h and strings.h (Savage).  If the
  344.  * system can't handle this, define NO_STRINGS_WITH_STRING_H. */
  345. # ifdef HAVE_STRING_H
  346. #  include <string.h>
  347. # endif
  348. # if defined(HAVE_STRINGS_H) && !defined(NO_STRINGS_WITH_STRING_H)
  349. #   include <strings.h>
  350. # endif
  351. # ifdef HAVE_STAT_H
  352. #  include <stat.h>
  353. # endif
  354. # ifdef HAVE_STDLIB_H
  355. #  include <stdlib.h>
  356. # endif
  357. #endif /* NON-UNIX */
  358.  
  359. #include <assert.h>
  360.  
  361. /* ================ end of the header file puzzle =============== */
  362.  
  363. /*
  364.  * For dynamically loaded imm library. Currently, only for Win32.
  365.  */
  366. #ifdef DYNAMIC_IME
  367. # ifndef FEAT_MBYTE_IME
  368. #  define FEAT_MBYTE_IME
  369. # endif
  370. #endif
  371.  
  372. /*
  373.  * Check input method control.
  374.  */
  375. #if defined(FEAT_XIM) || \
  376.     (defined(FEAT_GUI) && (defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)))
  377. # define USE_IM_CONTROL
  378. #endif
  379.  
  380. /*
  381.  * For dynamically loaded gettext library.  Currently, only for Win32.
  382.  */
  383. #ifdef DYNAMIC_GETTEXT
  384. # ifndef FEAT_GETTEXT
  385. #  define FEAT_GETTEXT
  386. # endif
  387. /* These are in os_win32.c */
  388. extern char* (*dyn_libintl_gettext)(const char* msgid);
  389. extern char* (*dyn_libintl_bindtextdomain)(const char* domainname, const char* dirname);
  390. extern char* (*dyn_libintl_textdomain)(const char* domainname);
  391. #endif
  392.  
  393.  
  394. /*
  395.  * The _() stuff is for using gettext().  It is a no-op when libintl.h is not
  396.  * found or the +multilang feature is disabled.
  397.  */
  398. #ifdef FEAT_GETTEXT
  399. # ifdef DYNAMIC_GETTEXT
  400. #  define _(x) (*dyn_libintl_gettext)((char *)(x))
  401. #  define N_(x) x
  402. #  define bindtextdomain(domain,dir) (*dyn_libintl_bindtextdomain)(domain,dir)
  403. #  define textdomain(domain) (*dyn_libintl_textdomain)(domain)
  404. # else
  405. #  include <libintl.h>
  406. #  define _(x) gettext((char *)(x))
  407. #  ifdef gettext_noop
  408. #   define N_(x) gettext_noop(x)
  409. #  else
  410. #   define N_(x) x
  411. #  endif
  412. # endif
  413. #else
  414. # define _(x) ((char *)(x))
  415. # define N_(x) x
  416. # ifdef bindtextdomain
  417. #  undef bindtextdomain
  418. # endif
  419. # define bindtextdomain(x, y) /* empty */
  420. # ifdef textdomain
  421. #  undef textdomain
  422. # endif
  423. # define textdomain(x) /* empty */
  424. #endif
  425.  
  426. /*
  427.  * flags for update_screen()
  428.  * The higher the value, the higher the priority
  429.  */
  430. #define VALID            10  /* buffer not changed, or changes marked
  431.                        with b_mod_* */
  432. #define INVERTED        20  /* redisplay inverted part that changed */
  433. #define INVERTED_ALL        25  /* redisplay whole inverted part */
  434. #define REDRAW_TOP        30  /* display first w_upd_rows screen lines */
  435. #define NOT_VALID        40  /* buffer needs complete redraw */
  436. #define CLEAR            50  /* screen messed up, clear it */
  437.  
  438. /*
  439.  * Hints used to optimize screen updating.
  440.  */
  441. #define HINT_NONE    0        /* no current hint */
  442. #define HINT_DEL_CHAR    1        /* delete character */
  443. #define HINT_INS_CHAR    2        /* insert character */
  444.  
  445. /*
  446.  * Flags for w_valid.
  447.  * These are set when something in a window structure becomes invalid, except
  448.  * when the cursor is moved.  Call check_cursor_moved() before testing one of
  449.  * the flags.
  450.  * These are reset when that thing has been updated and is valid again.
  451.  *
  452.  * Every function that invalidates one of these must call one of the
  453.  * invalidate_* functions.
  454.  *
  455.  * w_valid is supposed to be used only in screen.c.  From other files, use the
  456.  * functions that set or reset the flags.
  457.  *
  458.  * VALID_BOTLINE    VALID_BOTLINE_AP
  459.  *     on        on        w_botline valid
  460.  *     off        on        w_botline approximated
  461.  *     off        off        w_botline not valid
  462.  *     on        off        not possible
  463.  */
  464. #define VALID_WROW    0x01    /* w_wrow (window row) is valid */
  465. #define VALID_WCOL    0x02    /* w_wcol (window col) is valid */
  466. #define VALID_VIRTCOL    0x04    /* w_virtcol (file col) is valid */
  467. #define VALID_CHEIGHT    0x08    /* w_cline_height and w_cline_folded valid */
  468. #define VALID_CROW    0x10    /* w_cline_row is valid */
  469. #define VALID_BOTLINE    0x20    /* w_botine and w_empty_rows are valid */
  470. #define VALID_BOTLINE_AP 0x40    /* w_botine is approximated */
  471. #define VALID_TOPLINE    0x80    /* w_topline is valid (for cursor position) */
  472.  
  473. /*
  474.  * Terminal highlighting attribute bits.
  475.  * Attibutes above HL_ALL are used for syntax highlighting.
  476.  */
  477. #define HL_NORMAL        0x00
  478. #define HL_INVERSE        0x01
  479. #define HL_BOLD            0x02
  480. #define HL_ITALIC        0x04
  481. #define HL_UNDERLINE        0x08
  482. #define HL_STANDOUT        0x10
  483. #define HL_ALL            0x1f
  484.  
  485. /* special attribute addition: Put message in history */
  486. #define MSG_HIST        0x1000
  487.  
  488. /*
  489.  * values for State
  490.  *
  491.  * The lower bits up to 0x20 are used to distinguish normal/visual/op_pending
  492.  * and cmdline/insert+replace mode.  This is used for mapping.  If none of
  493.  * these bits are set, no mapping is done.
  494.  * The upper bits are used to distinguish between other states.
  495.  */
  496. #define NORMAL        0x01    /* Normal mode, command expected */
  497. #define VISUAL        0x02    /* Visual mode - use get_real_state() */
  498. #define OP_PENDING    0x04    /* Normal mode, operator is pending - use
  499.                    get_real_state() */
  500. #define CMDLINE        0x08    /* Editing command line */
  501. #define INSERT        0x10    /* Insert mode */
  502. #define LANGMAP        0x20    /* Language mapping, can be combined with
  503.                    INSERT and CMDLINE */
  504.  
  505. #define REPLACE_FLAG    0x40    /* Replace mode flag */
  506. #define REPLACE        (REPLACE_FLAG + INSERT)
  507. #ifdef FEAT_VREPLACE
  508. # define VREPLACE_FLAG    0x80    /* Virtual-replace mode flag */
  509. # define VREPLACE    (REPLACE_FLAG + VREPLACE_FLAG + INSERT)
  510. #endif
  511. #define LREPLACE    (REPLACE_FLAG + LANGMAP)
  512.  
  513. #define NORMAL_BUSY    (0x100 + NORMAL) /* Normal mode, busy with a command */
  514. #define HITRETURN    (0x200 + NORMAL) /* waiting for return or command */
  515. #define ASKMORE        0x300    /* Asking if you want --more-- */
  516. #define SETWSIZE    0x400    /* window size has changed */
  517. #define ABBREV        0x500    /* abbreviation instead of mapping */
  518. #define EXTERNCMD    0x600    /* executing an external command */
  519. #define SHOWMATCH    (0x700 + INSERT) /* show matching paren */
  520. #define CONFIRM        0x800    /* ":confirm" prompt */
  521.  
  522. /* directions */
  523. #define FORWARD            1
  524. #define BACKWARD        (-1)
  525. #define FORWARD_FILE        3
  526.  
  527. /* return values for functions */
  528. #if !(defined(OK) && (OK == 1))
  529. /* OK already defined to 1 in MacOS X curses */
  530. /* (still protect against any other OK) */
  531. # define OK            1
  532. #endif
  533. #define FAIL            0
  534.  
  535. /* flags for b_flags */
  536. #define BF_RECOVERED    0x01    /* buffer has been recovered */
  537. #define BF_CHECK_RO    0x02    /* need to check readonly when loading file
  538.                    into buffer (set by ":e", may be reset by
  539.                    ":buf" */
  540. #define BF_NEVERLOADED    0x04    /* file has never been loaded into buffer,
  541.                    many variables still need to be set */
  542. #define BF_NOTEDITED    0x08    /* Set when file name is changed after
  543.                    starting to edit, reset when file is
  544.                    written out. */
  545. #define BF_NEW        0x10    /* file didn't exist when editing started */
  546. #define BF_NEW_W    0x20    /* Warned for BF_NEW and file created */
  547. #define BF_READERR    0x40    /* got errors while reading the file */
  548.  
  549. /* Mask to check for flags that prevent normal writing */
  550. #define BF_WRITE_MASK    (BF_NOTEDITED + BF_NEW + BF_READERR)
  551.  
  552. /*
  553.  * values for xp_context when doing command line completion
  554.  */
  555. #define CONTEXT_UNKNOWN        (-3)
  556. #define EXPAND_UNSUCCESSFUL    (-2)
  557. #define EXPAND_OK        (-1)
  558. #define EXPAND_NOTHING        0
  559. #define EXPAND_COMMANDS        1
  560. #define EXPAND_FILES        2
  561. #define EXPAND_DIRECTORIES    3
  562. #define EXPAND_SETTINGS        4
  563. #define EXPAND_BOOL_SETTINGS    5
  564. #define EXPAND_TAGS        6
  565. #define EXPAND_OLD_SETTING    7
  566. #define EXPAND_HELP        8
  567. #define EXPAND_BUFFERS        9
  568. #define EXPAND_EVENTS        10
  569. #define EXPAND_MENUS        11
  570. #define EXPAND_SYNTAX        12
  571. #define EXPAND_HIGHLIGHT    13
  572. #define EXPAND_AUGROUP        14
  573. #define EXPAND_USER_VARS    15
  574. #define EXPAND_MAPPINGS        16
  575. #define EXPAND_TAGS_LISTFILES    17
  576. #define EXPAND_FUNCTIONS    18
  577. #define EXPAND_USER_FUNC    19
  578. #define EXPAND_EXPRESSION    20
  579. #define EXPAND_MENUNAMES    21
  580. #define EXPAND_USER_COMMANDS    22
  581. #define EXPAND_USER_CMD_FLAGS    23
  582. #define EXPAND_USER_NARGS    24
  583. #define EXPAND_USER_COMPLETE    25
  584. #define EXPAND_ENV_VARS        26
  585. #define EXPAND_LANGUAGE        27
  586. #define EXPAND_COLORS        28
  587. #define EXPAND_COMPILER        29
  588.  
  589. /* Values for exmode_active (0 is no exmode) */
  590. #define EXMODE_NORMAL        1
  591. #define EXMODE_VIM        2
  592.  
  593. /* Values for nextwild() and ExpandOne().  See ExpandOne() for meaning. */
  594. #define WILD_FREE        1
  595. #define WILD_EXPAND_FREE    2
  596. #define WILD_EXPAND_KEEP    3
  597. #define WILD_NEXT        4
  598. #define WILD_PREV        5
  599. #define WILD_ALL        6
  600. #define WILD_LONGEST        7
  601.  
  602. #define WILD_LIST_NOTFOUND    1
  603. #define WILD_HOME_REPLACE    2
  604. #define WILD_USE_NL        4
  605. #define WILD_NO_BEEP        8
  606. #define WILD_ADD_SLASH        16
  607. #define WILD_KEEP_ALL        32
  608. #define WILD_SILENT        64
  609. #define WILD_ESCAPE        128
  610.  
  611. /* Flags for expand_wildcards() */
  612. #define EW_DIR        1    /* include directory names */
  613. #define EW_FILE        2    /* include file names */
  614. #define EW_NOTFOUND    4    /* include not found names */
  615. #define EW_ADDSLASH    8    /* append slash to directory name */
  616. #define EW_KEEPALL    16    /* keep all matches */
  617. #define EW_SILENT    32    /* don't print "1 returned" from shell */
  618. /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
  619.  * is used when executing commands and EW_SILENT for interactive expanding. */
  620.  
  621. #ifdef FEAT_VERTSPLIT
  622. # define W_WINCOL(wp)    (wp->w_wincol)
  623. # define W_WIDTH(wp)    (wp->w_width)
  624. # define W_ENDCOL(wp)    (wp->w_wincol + wp->w_width)
  625. # define W_VSEP_WIDTH(wp) (wp->w_vsep_width)
  626. #else
  627. # define W_WINCOL(wp)    0
  628. # define W_WIDTH(wp)    Columns
  629. # define W_ENDCOL(wp)    Columns
  630. # define W_VSEP_WIDTH(wp) 0
  631. #endif
  632. #ifdef FEAT_WINDOWS
  633. # define W_STATUS_HEIGHT(wp) (wp->w_status_height)
  634. # define W_WINROW(wp)    (wp->w_winrow)
  635. #else
  636. # define W_STATUS_HEIGHT(wp) 0
  637. # define W_WINROW(wp)    0
  638. #endif
  639.  
  640. #ifdef NO_EXPANDPATH
  641. # define gen_expand_wildcards mch_expand_wildcards
  642. #endif
  643.  
  644. /* Values for the find_pattern_in_path() function args 'type' and 'action': */
  645. #define FIND_ANY    1
  646. #define FIND_DEFINE    2
  647. #define CHECK_PATH    3
  648.  
  649. #define ACTION_SHOW    1
  650. #define ACTION_GOTO    2
  651. #define ACTION_SPLIT    3
  652. #define ACTION_SHOW_ALL    4
  653. #ifdef FEAT_INS_EXPAND
  654. # define ACTION_EXPAND    5
  655. #endif
  656.  
  657. #ifdef FEAT_SYN_HL
  658. # define SST_MIN_ENTRIES 150    /* minimal size for state stack array */
  659. # ifdef FEAT_GUI_W16
  660. #  define SST_MAX_ENTRIES 500    /* (only up to 64K blocks) */
  661. # else
  662. #  define SST_MAX_ENTRIES 1000    /* maximal size for state stack array */
  663. # endif
  664. # define SST_FIX_STATES     7    /* size of sst_stack[]. */
  665. # define SST_DIST     16    /* normal distance between entries */
  666. # define SST_INVALID    (synstate_T *)-1    /* invalid syn_state pointer */
  667. #endif
  668.  
  669. /* Values for 'options' argument in do_search() and searchit() */
  670. #define SEARCH_REV    0x01  /* go in reverse of previous dir. */
  671. #define SEARCH_ECHO   0x02  /* echo the search command and handle options */
  672. #define SEARCH_MSG    0x0c  /* give messages (yes, it's not 0x04) */
  673. #define SEARCH_NFMSG  0x08  /* give all messages except not found */
  674. #define SEARCH_OPT    0x10  /* interpret optional flags */
  675. #define SEARCH_HIS    0x20  /* put search pattern in history */
  676. #define SEARCH_END    0x40  /* put cursor at end of match */
  677. #define SEARCH_NOOF   0x80  /* don't add offset to position */
  678. #define SEARCH_START 0x100  /* start search without col offset */
  679. #define SEARCH_MARK  0x200  /* set previous context mark */
  680. #define SEARCH_KEEP  0x400  /* keep previous search pattern */
  681.  
  682. /* Values for find_ident_under_cursor() */
  683. #define FIND_IDENT    1    /* find identifier (word) */
  684. #define FIND_STRING    2    /* find any string (WORD) */
  685.  
  686. /* Values for file_name_in_line() */
  687. #define FNAME_MESS    1    /* give error message */
  688. #define FNAME_EXP    2    /* expand to path */
  689. #define FNAME_HYP    4    /* check for hypertext link */
  690. #define FNAME_INCL    8    /* apply 'includeexpr' */
  691. #define FNAME_REL    16    /* ".." and "./" are relative to the (current)
  692.                    file instead of the current directory */
  693.  
  694. /* Values for buflist_getfile() */
  695. #define GETF_SETMARK    0x01    /* set pcmark before jumping */
  696. #define GETF_ALT    0x02    /* jumping to alternate file (not buf num) */
  697. #define GETF_SWITCH    0x04    /* respect 'switchbuf' settings when jumping */
  698.  
  699. /* Values for buflist_new() flags */
  700. #define BLN_CURBUF    1    /* May re-use curbuf for new buffer */
  701. #define BLN_LISTED    2    /* Put new buffer in buffer list */
  702. #define BLN_DUMMY    4    /* Allocating dummy buffer */
  703.  
  704. /* Values for in_cinkeys() */
  705. #define KEY_OPEN_FORW    0x101
  706. #define KEY_OPEN_BACK    0x102
  707. #define KEY_COMPLETE    0x103    /* end of completion */
  708.  
  709. /* Values for "noremap" argument of ins_typebuf().  Also used for
  710.  * map->m_noremap and menu->noremap[]. */
  711. #define REMAP_YES    0    /* allow remapping */
  712. #define REMAP_NONE    -1    /* no remapping */
  713. #define REMAP_SCRIPT    -2    /* remap script-local mappings only */
  714.  
  715. /* Values for mch_call_shell() second argument */
  716. #define SHELL_FILTER    1    /* filtering text */
  717. #define SHELL_EXPAND    2    /* expanding wildcards */
  718. #define SHELL_COOKED    4    /* set term to cooked mode */
  719. #define SHELL_DOOUT    8    /* redirecting output */
  720. #define SHELL_SILENT    16    /* don't print error returned by command */
  721.  
  722. /* Values returned by mch_nodetype() */
  723. #define NODE_NORMAL    0    /* file or directory, check with mch_isdir()*/
  724. #define NODE_WRITABLE    1    /* something we can write to (character
  725.                    device, fifo, socket, ..) */
  726. #define NODE_OTHER    2    /* non-writable thing (e.g., block device) */
  727.  
  728. /* Values for readfile() flags */
  729. #define READ_NEW    0x01    /* read a file into a new buffer */
  730. #define READ_FILTER    0x02    /* read filter output */
  731. #define READ_STDIN    0x04    /* read from stdin */
  732. #define READ_BUFFER    0x08    /* read from curbuf (converting stdin) */
  733. #define READ_DUMMY    0x10    /* reading into a dummy buffer */
  734.  
  735. /* Values for change_indent() */
  736. #define INDENT_SET    1    /* set indent */
  737. #define INDENT_INC    2    /* increase indent */
  738. #define INDENT_DEC    3    /* decrease indent */
  739.  
  740. /* Values for flags argument for findmatchlimit() */
  741. #define FM_BACKWARD    0x01    /* search backwards */
  742. #define FM_FORWARD    0x02    /* search forwards */
  743. #define FM_BLOCKSTOP    0x04    /* stop at start/end of block */
  744. #define FM_SKIPCOMM    0x08    /* skip comments */
  745.  
  746. /* Values for action argument for do_buffer() */
  747. #define DOBUF_GOTO    0    /* go to specified buffer */
  748. #define DOBUF_SPLIT    1    /* split window and go to specified buffer */
  749. #define DOBUF_UNLOAD    2    /* unload specified buffer(s) */
  750. #define DOBUF_DEL    3    /* delete specified buffer(s) from buflist */
  751. #define DOBUF_WIPE    4    /* delete specified buffer(s) really */
  752.  
  753. /* Values for start argument for do_buffer() */
  754. #define DOBUF_CURRENT    0    /* "count" buffer from current buffer */
  755. #define DOBUF_FIRST    1    /* "count" buffer from first buffer */
  756. #define DOBUF_LAST    2    /* "count" buffer from last buffer */
  757. #define DOBUF_MOD    3    /* "count" mod. buffer from current buffer */
  758.  
  759. /* Values for sub_cmd and which_pat argument for search_regcomp() */
  760. /* Also used for which_pat argument for searchit() */
  761. #define RE_SEARCH    0    /* save/use pat in/from search_pattern */
  762. #define RE_SUBST    1    /* save/use pat in/from subst_pattern */
  763. #define RE_BOTH        2    /* save pat in both patterns */
  764. #define RE_LAST        2    /* use last used pattern if "pat" is NULL */
  765.  
  766. #ifdef FEAT_SYN_HL
  767. /* values for reg_do_extmatch */
  768. # define REX_SET    1    /* to allow \z\(...\), */
  769. # define REX_USE    2    /* to allow \z\1 et al. */
  770. #endif
  771.  
  772. /* Return values for fullpathcmp() */
  773. /* Note: can use (fullpathcmp() & FPC_SAME) to check for equal files */
  774. #define FPC_SAME    1    /* both exist and are the same file. */
  775. #define FPC_DIFF    2    /* both exist and are different files. */
  776. #define FPC_NOTX    4    /* both don't exist. */
  777. #define FPC_DIFFX    6    /* one of them doesn't exist. */
  778. #define FPC_SAMEX    7    /* both don't exist and file names are same. */
  779.  
  780. /* flags for do_ecmd() */
  781. #define ECMD_HIDE    0x01    /* don't free the current buffer */
  782. #define ECMD_SET_HELP    0x02    /* set b_help flag of (new) buffer before
  783.                    opening file */
  784. #define ECMD_OLDBUF    0x04    /* use existing buffer if it exists */
  785. #define ECMD_FORCEIT    0x08    /* ! used in Ex command */
  786. #define ECMD_ADDBUF    0x10    /* don't edit, just add to buffer list */
  787.  
  788. /* for lnum argument in do_ecmd() */
  789. #define ECMD_LASTL    (linenr_T)0    /* use last position in loaded file */
  790. #define ECMD_LAST    (linenr_T)-1    /* use last position in all files */
  791. #define ECMD_ONE    (linenr_T)1    /* use first line */
  792.  
  793. /* flags for do_cmdline() */
  794. #define DOCMD_VERBOSE    0x01    /* included command in error message */
  795. #define DOCMD_NOWAIT    0x02    /* don't call wait_return() and friends */
  796. #define DOCMD_REPEAT    0x04    /* repeat exec. until getline() returns NULL */
  797. #define DOCMD_KEYTYPED    0x08    /* don't reset KeyTyped */
  798.  
  799. /* flags for beginline() */
  800. #define BL_WHITE    1    /* cursor on first non-white in the line */
  801. #define BL_SOL        2    /* use 'sol' option */
  802. #define BL_FIX        4    /* don't leave cursor on a NUL */
  803.  
  804. /* flags for mf_sync() */
  805. #define MFS_ALL        1    /* also sync blocks with negative numbers */
  806. #define MFS_STOP    2    /* stop syncing when a character is available */
  807. #define MFS_FLUSH    4    /* flushed file to disk */
  808. #define MFS_ZERO    8    /* only write block 0 */
  809.  
  810. /* flags for buf_copy_options() */
  811. #define BCO_ENTER    1    /* going to enter the buffer */
  812. #define BCO_ALWAYS    2    /* always copy the options */
  813. #define BCO_NOHELP    4    /* don't touch the help related options */
  814.  
  815. /* flags for do_put() */
  816. #define PUT_FIXINDENT    1    /* make indent look nice */
  817. #define PUT_CURSEND    2    /* leave cursor after end of new text */
  818.  
  819. /* flags for set_indent() */
  820. #define SIN_CHANGED    1    /* call changed_bytes() when line changed */
  821. #define SIN_INSERT    2    /* insert indent before existing text */
  822. #define SIN_UNDO    4    /* save line for undo before changing it */
  823.  
  824. /* flags for insertchar() */
  825. #define INSCHAR_FORMAT    1    /* force formatting */
  826. #define INSCHAR_DO_COM    2    /* format comments */
  827. #define INSCHAR_CTRLV    4    /* char typed just after CTRL-V */
  828.  
  829. /* flags for open_line() */
  830. #define OPENLINE_DELSPACES  1    /* delete spaces after cursor */
  831. #define OPENLINE_DO_COM        2    /* format comments */
  832.  
  833. /*
  834.  * There are four history tables:
  835.  */
  836. #define HIST_CMD    0    /* colon commands */
  837. #define HIST_SEARCH    1    /* search commands */
  838. #define HIST_EXPR    2    /* expressions (from entering = register) */
  839. #define HIST_INPUT    3    /* input() lines */
  840. #define HIST_DEBUG    4    /* debug commands */
  841. #define HIST_COUNT    5    /* number of history tables */
  842.  
  843. /*
  844.  * Flags for chartab[].
  845.  */
  846. #define CT_CELL_MASK    0x07    /* mask: nr of display cells (1, 2 or 4) */
  847. #define CT_PRINT_CHAR    0x10    /* flag: set for printable chars */
  848. #define CT_ID_CHAR    0x20    /* flag: set for ID chars */
  849. #define CT_FNAME_CHAR    0x40    /* flag: set for file name chars */
  850.  
  851. /*
  852.  * Values for do_tag().
  853.  */
  854. #define DT_TAG        1    /* jump to newer position or same tag again */
  855. #define DT_POP        2    /* jump to older position */
  856. #define DT_NEXT        3    /* jump to next match of same tag */
  857. #define DT_PREV        4    /* jump to previous match of same tag */
  858. #define DT_FIRST    5    /* jump to first match of same tag */
  859. #define DT_LAST        6    /* jump to first match of same tag */
  860. #define DT_SELECT    7    /* jump to selection from list */
  861. #define DT_HELP        8    /* like DT_TAG, but no wildcards */
  862. #define DT_JUMP        9    /* jump to new tag or selection from list */
  863. #define DT_CSCOPE    10    /* cscope find command (like tjump) */
  864.  
  865. /*
  866.  * flags for find_tags().
  867.  */
  868. #define TAG_HELP    1    /* only search for help tags */
  869. #define TAG_NAMES    2    /* only return name of tag */
  870. #define    TAG_REGEXP    4    /* use tag pattern as regexp */
  871. #define    TAG_NOIC    8    /* don't always ignore case */
  872. #ifdef FEAT_CSCOPE
  873. # define TAG_CSCOPE    16    /* cscope tag */
  874. #endif
  875. #define TAG_VERBOSE    32    /* message verbosity */
  876. #define TAG_INS_COMP    64    /* Currently doing insert completion */
  877. #define TAG_MANY    200    /* When finding many tags (for completion),
  878.                    find up to this many tags */
  879.  
  880. /*
  881.  * Types of dialogs passed to do_vim_dialog().
  882.  */
  883. #define VIM_GENERIC    0
  884. #define VIM_ERROR    1
  885. #define VIM_WARNING    2
  886. #define VIM_INFO    3
  887. #define VIM_QUESTION    4
  888. #define VIM_LAST_TYPE    4    /* sentinel value */
  889.  
  890. /*
  891.  * Return values for functions like gui_yesnocancel()
  892.  */
  893. #define VIM_OK        1
  894. #define VIM_YES        2
  895. #define VIM_NO        3
  896. #define VIM_CANCEL    4
  897. #define VIM_ALL        5
  898. #define VIM_DISCARDALL  6
  899.  
  900. /*
  901.  * arguments for win_split()
  902.  */
  903. #define WSP_ROOM    1    /* require enough room */
  904. #define WSP_VERT    2    /* split vertically */
  905. #define WSP_TOP        4    /* window at top-left of shell */
  906. #define WSP_BOT        8    /* window at bottom-right of shell */
  907. #define WSP_HELP    16    /* creating the help window */
  908. #define WSP_BELOW    32    /* put new window below/right */
  909. #define WSP_ABOVE    64    /* put new window above/left */
  910.  
  911. /*
  912.  * "flags" values for option-setting functions.
  913.  * When OPT_GLOBAL and OPT_LOCAL are both missing, set both local and global
  914.  * values, get local value.
  915.  */
  916. #define OPT_FREE    1    /* free old value if it was allocated */
  917. #define OPT_GLOBAL    2    /* use global value */
  918. #define OPT_LOCAL    4    /* use local value */
  919. #define OPT_MODELINE    8    /* option in modeline */
  920.  
  921. /* Magic chars used in confirm dialog strings */
  922. #define DLG_BUTTON_SEP    '\n'
  923. #define DLG_HOTKEY_CHAR    '&'
  924.  
  925. /* Values for "starting" */
  926. #define NO_SCREEN    2    /* no screen updating yet */
  927. #define NO_BUFFERS    1    /* not all buffers loaded yet */
  928. /*            0       not starting anymore */
  929.  
  930. /* Values for swap_exists_action: what to do when swap file already exists */
  931. #define SEA_NONE    0    /* don't use dialog */
  932. #define SEA_DIALOG    1    /* use dialog when */
  933. #define SEA_QUIT    2    /* quit editing the file */
  934. #define SEA_RECOVER    3    /* recover the file */
  935.  
  936. /*
  937.  * Minimal size for block 0 of a swap file.
  938.  * NOTE: This depends on size of struct block0! It's not done with a sizeof(),
  939.  * because struct block0 is defined in memline.c (Sorry).
  940.  * The maximal block size is arbitrary.
  941.  */
  942. #define MIN_SWAP_PAGE_SIZE 1048
  943. #define MAX_SWAP_PAGE_SIZE 50000
  944.  
  945. #define SID_MODELINE    -1    /* script ID when using a modeline */
  946.  
  947. /*
  948.  * Events for autocommands.
  949.  */
  950. enum auto_event
  951. {
  952.     EVENT_BUFADD = 0,        /* after adding a buffer to the buffer list */
  953.     EVENT_BUFNEW,        /* after creating any buffer */
  954.     EVENT_BUFDELETE,        /* deleting a buffer from the buffer list */
  955.     EVENT_BUFWIPEOUT,        /* just before really deleting a buffer */
  956.     EVENT_BUFENTER,        /* after entering a buffer */
  957.     EVENT_BUFFILEPOST,        /* after renaming a buffer */
  958.     EVENT_BUFFILEPRE,        /* before renaming a buffer */
  959.     EVENT_BUFLEAVE,        /* before leaving a buffer */
  960.     EVENT_BUFNEWFILE,        /* when creating a buffer for a new file */
  961.     EVENT_BUFREADPOST,        /* after reading a buffer */
  962.     EVENT_BUFREADPRE,        /* before reading a buffer */
  963.     EVENT_BUFREADCMD,        /* read buffer using command */
  964.     EVENT_BUFUNLOAD,        /* just before unloading a buffer */
  965.     EVENT_BUFHIDDEN,        /* just after buffer becomes hidden */
  966.     EVENT_BUFWINENTER,        /* after showing a buffer in a window */
  967.     EVENT_BUFWINLEAVE,        /* just after buffer removed from window */
  968.     EVENT_BUFWRITEPOST,        /* after writing a buffer */
  969.     EVENT_BUFWRITEPRE,        /* before writing a buffer */
  970.     EVENT_BUFWRITECMD,        /* write buffer using command */
  971.     EVENT_CMDWINENTER,        /* after entering the cmdline window */
  972.     EVENT_CMDWINLEAVE,        /* before leaving the cmdline window */
  973.     EVENT_FILEAPPENDPOST,    /* after appending to a file */
  974.     EVENT_FILEAPPENDPRE,    /* before appending to a file */
  975.     EVENT_FILEAPPENDCMD,    /* appende to a file using command */
  976.     EVENT_FILECHANGEDSHELL,    /* after shell command that changed file */
  977.     EVENT_FILECHANGEDRO,    /* before first change to read-only file */
  978.     EVENT_FILEREADPOST,        /* after reading a file */
  979.     EVENT_FILEREADPRE,        /* before reading a file */
  980.     EVENT_FILEREADCMD,        /* read from a file using command */
  981.     EVENT_FILETYPE,        /* new file type detected (user defined) */
  982.     EVENT_FILEWRITEPOST,    /* after writing a file */
  983.     EVENT_FILEWRITEPRE,        /* before writing a file */
  984.     EVENT_FILEWRITECMD,        /* write to a file using command */
  985.     EVENT_FILTERREADPOST,    /* after reading from a filter */
  986.     EVENT_FILTERREADPRE,    /* before reading from a filter */
  987.     EVENT_FILTERWRITEPOST,    /* after writing to a filter */
  988.     EVENT_FILTERWRITEPRE,    /* before writing to a filter */
  989.     EVENT_FOCUSGAINED,        /* got the focus */
  990.     EVENT_FOCUSLOST,        /* lost the focus to another app */
  991.     EVENT_GUIENTER,        /* after starting the GUI */
  992.     EVENT_STDINREADPOST,    /* after reading from stdin */
  993.     EVENT_STDINREADPRE,        /* before reading from stdin */
  994.     EVENT_SYNTAX,        /* syntax selected */
  995.     EVENT_TERMCHANGED,        /* after changing 'term' */
  996.     EVENT_TERMRESPONSE,        /* after setting "v:termresponse" */
  997.     EVENT_USER,            /* user defined autocommand */
  998.     EVENT_VIMENTER,        /* after starting Vim */
  999.     EVENT_VIMLEAVE,        /* before exiting Vim */
  1000.     EVENT_VIMLEAVEPRE,        /* before exiting Vim and writing .viminfo */
  1001.     EVENT_WINENTER,        /* after entering a window */
  1002.     EVENT_WINLEAVE,        /* before leaving a window */
  1003.     EVENT_ENCODINGCHANGED,    /* after changing the 'encoding' option */
  1004.     EVENT_CURSORHOLD,        /* cursor in same position for a while */
  1005.     EVENT_FUNCUNDEFINED,    /* if calling a function which doesn't exist */
  1006.     EVENT_REMOTEREPLY,        /* upon string reception from a remote vim */
  1007.     NUM_EVENTS            /* MUST be the last one */
  1008. };
  1009.  
  1010. typedef enum auto_event EVENT_T;
  1011.  
  1012. /*
  1013.  * Values for index in highlight_attr[].
  1014.  * When making changes, also update HL_FLAGS below!  And update the default
  1015.  * value of 'highlight' in option.c.
  1016.  */
  1017. enum hlf_value
  1018. {
  1019.     HLF_8 = 0        /* Meta & special keys listed with ":map", text that is
  1020.                displayed different from what it is */
  1021.     , HLF_AT        /* @ and ~ characters at end of screen, characters that
  1022.                don't really exist in the text */
  1023.     , HLF_D        /* directories in CTRL-D listing */
  1024.     , HLF_E        /* error messages */
  1025.     , HLF_H        /* obsolete, ignored */
  1026.     , HLF_I        /* incremental search */
  1027.     , HLF_L        /* last search string */
  1028.     , HLF_M        /* "--More--" message */
  1029.     , HLF_CM        /* Mode (e.g., "-- INSERT --") */
  1030.     , HLF_N        /* line number for ":number" and ":#" commands */
  1031.     , HLF_R        /* return to continue message and yes/no questions */
  1032.     , HLF_S        /* status lines */
  1033.     , HLF_SNC        /* status lines of not-current windows */
  1034.     , HLF_C        /* column to separate vertically split windows */
  1035.     , HLF_T        /* Titles for output from ":set all", ":autocmd" etc. */
  1036.     , HLF_V        /* Visual mode */
  1037.     , HLF_VNC        /* Visual mode, autoselecting and not clipboard owner */
  1038.     , HLF_W        /* warning messages */
  1039.     , HLF_WM        /* Wildmenu highlight */
  1040.     , HLF_FL        /* Folded line */
  1041.     , HLF_FC        /* Fold column */
  1042.     , HLF_ADD        /* Added diff line */
  1043.     , HLF_CHD        /* Changed diff line */
  1044.     , HLF_DED        /* Deleted diff line */
  1045.     , HLF_TXD        /* Text Changed in diff line */
  1046.     , HLF_COUNT        /* MUST be the last one */
  1047. };
  1048.  
  1049. /* the HL_FLAGS must be in the same order as the HLF_ enums! */
  1050. #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
  1051.           'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
  1052.           'f', 'F', 'A', 'C', 'D', 'T'}
  1053.  
  1054. /*
  1055.  * Boolean constants
  1056.  */
  1057. #ifndef TRUE
  1058. # define FALSE    0        /* note: this is an int, not a long! */
  1059. # define TRUE    1
  1060. #endif
  1061.  
  1062. #define MAYBE    2        /* sometimes used for a variant on TRUE */
  1063.  
  1064. /* May be returned by add_new_completion(): */
  1065. #define RET_ERROR        (-1)
  1066.  
  1067. /*
  1068.  * Operator IDs; The order must correspond to opchars[] in ops.c!
  1069.  */
  1070. #define OP_NOP        0    /* no pending operation */
  1071. #define OP_DELETE    1    /* "d"  delete operator */
  1072. #define OP_YANK        2    /* "y"  yank operator */
  1073. #define OP_CHANGE    3    /* "c"  change operator */
  1074. #define OP_LSHIFT    4    /* "<"  left shift operator */
  1075. #define OP_RSHIFT    5    /* ">"  right shift operator */
  1076. #define OP_FILTER    6    /* "!"  filter operator */
  1077. #define OP_TILDE    7    /* "g~" switch case operator */
  1078. #define OP_INDENT    8    /* "="  indent operator */
  1079. #define OP_FORMAT    9    /* "gq" format operator */
  1080. #define OP_COLON    10    /* ":"  colon operator */
  1081. #define OP_UPPER    11    /* "gU" make upper case operator */
  1082. #define OP_LOWER    12    /* "gu" make lower case operator */
  1083. #define OP_JOIN        13    /* "J"  join operator, only for Visual mode */
  1084. #define OP_JOIN_NS    14    /* "gJ"  join operator, only for Visual mode */
  1085. #define OP_ROT13    15    /* "g?" rot-13 encoding */
  1086. #define OP_REPLACE    16    /* "r"  replace chars, only for Visual mode */
  1087. #define OP_INSERT    17    /* "I"  Insert column, only for Visual mode */
  1088. #define OP_APPEND    18    /* "A"  Append column, only for Visual mode */
  1089. #define OP_FOLD        19    /* "zf" define a fold */
  1090. #define OP_FOLDOPEN    20    /* "zo" open folds */
  1091. #define OP_FOLDOPENREC    21    /* "zO" open folds recursively */
  1092. #define OP_FOLDCLOSE    22    /* "zc" close folds */
  1093. #define OP_FOLDCLOSEREC    23    /* "zC" close folds recursively */
  1094. #define OP_FOLDDEL    24    /* "zd" delete folds */
  1095. #define OP_FOLDDELREC    25    /* "zD" delete folds recursively */
  1096.  
  1097. /*
  1098.  * Motion types, used for operators and for yank/delete registers.
  1099.  */
  1100. #define MCHAR    0        /* character-wise movement/register */
  1101. #define MLINE    1        /* line-wise movement/register */
  1102. #define MBLOCK    2        /* block-wise register */
  1103.  
  1104. /*
  1105.  * Minimum screen size
  1106.  */
  1107. #define MIN_COLUMNS    12    /* minimal columns for screen */
  1108. #define MIN_LINES    2    /* minimal lines for screen */
  1109. #define STATUS_HEIGHT    1    /* height of a status line under a window */
  1110. #define QF_WINHEIGHT    10    /* default height for quickfix window */
  1111.  
  1112. /*
  1113.  * Buffer sizes
  1114.  */
  1115. #ifndef CMDBUFFSIZE
  1116. # define CMDBUFFSIZE    256    /* size of the command processing buffer */
  1117. #endif
  1118.  
  1119. #define LSIZE        512        /* max. size of a line in the tags file */
  1120.  
  1121. #define IOSIZE       (1024+1)    /* file i/o and sprintf buffer size */
  1122. #define MSG_BUF_LEN 80        /* length of buffer for small messages */
  1123.  
  1124. #if defined(AMIGA) || defined(__linux__) || defined(__QNX__) || defined(__CYGWIN32__) || defined(_AIX)
  1125. # define TBUFSZ 2048        /* buffer size for termcap entry */
  1126. #else
  1127. # define TBUFSZ 1024        /* buffer size for termcap entry */
  1128. #endif
  1129.  
  1130. /*
  1131.  * Maximum length of key sequence to be mapped.
  1132.  * Must be able to hold an Amiga resize report.
  1133.  */
  1134. #define MAXMAPLEN   50
  1135.  
  1136. #ifdef BINARY_FILE_IO
  1137. # define WRITEBIN   "wb"    /* no CR-LF translation */
  1138. # define READBIN    "rb"
  1139. # define APPENDBIN  "ab"
  1140. #else
  1141. # define WRITEBIN   "w"
  1142. # define READBIN    "r"
  1143. # define APPENDBIN  "a"
  1144. #endif
  1145.  
  1146. /*
  1147.  * EMX doesn't have a global way of making open() use binary I/O.
  1148.  * Use O_BINARY for all open() calls.
  1149.  */
  1150. #if defined(__EMX__) || defined(__CYGWIN32__)
  1151. # define O_EXTRA    O_BINARY
  1152. #else
  1153. # define O_EXTRA    0
  1154. #endif
  1155.  
  1156. #ifndef W_OK
  1157. # define W_OK 2        /* for systems that don't have W_OK in unistd.h */
  1158. #endif
  1159. #ifndef R_OK
  1160. # define R_OK 4        /* for systems that don't have R_OK in unistd.h */
  1161. #endif
  1162.  
  1163. /*
  1164.  * defines to avoid typecasts from (char_u *) to (char *) and back
  1165.  * (vim_strchr() and vim_strrchr() are now in alloc.c)
  1166.  */
  1167. #define STRLEN(s)        strlen((char *)(s))
  1168. #define STRCPY(d, s)        strcpy((char *)(d), (char *)(s))
  1169. #define STRNCPY(d, s, n)    strncpy((char *)(d), (char *)(s), (size_t)(n))
  1170. #define STRCMP(d, s)        strcmp((char *)(d), (char *)(s))
  1171. #define STRNCMP(d, s, n)    strncmp((char *)(d), (char *)(s), (size_t)(n))
  1172. #ifdef HAVE_STRCASECMP
  1173. # define STRICMP(d, s)        strcasecmp((char *)(d), (char *)(s))
  1174. #else
  1175. # ifdef HAVE_STRICMP
  1176. #  define STRICMP(d, s)        stricmp((char *)(d), (char *)(s))
  1177. # else
  1178. #  define STRICMP(d, s)        vim_stricmp((char *)(d), (char *)(s))
  1179. # endif
  1180. #endif
  1181.  
  1182. #ifdef HAVE_STRNCASECMP
  1183. # define STRNICMP(d, s, n)  strncasecmp((char *)(d), (char *)(s), (size_t)(n))
  1184. #else
  1185. # ifdef HAVE_STRNICMP
  1186. #  define STRNICMP(d, s, n) strnicmp((char *)(d), (char *)(s), (size_t)(n))
  1187. # else
  1188. #  define STRNICMP(d, s, n) vim_strnicmp((char *)(d), (char *)(s), (size_t)(n))
  1189. # endif
  1190. #endif
  1191.  
  1192. #ifdef FEAT_MBYTE
  1193. # define MB_STRICMP(d, s)    (has_mbyte ? mb_strnicmp((char_u *)(d), (char_u *)(s), (int)MAXCOL) : STRICMP((d), (s)))
  1194. # define MB_STRNICMP(d, s, n)    (has_mbyte ? mb_strnicmp((char_u *)(d), (char_u *)(s), (int)(n)) : STRNICMP((d), (s), (n)))
  1195. #else
  1196. # define MB_STRICMP(d, s)    STRICMP((d), (s))
  1197. # define MB_STRNICMP(d, s, n)    STRNICMP((d), (s), (n))
  1198. #endif
  1199.  
  1200. #define STRCAT(d, s)        strcat((char *)(d), (char *)(s))
  1201. #define STRNCAT(d, s, n)    strncat((char *)(d), (char *)(s), (size_t)(n))
  1202.  
  1203. #ifdef HAVE_STRPBRK
  1204. # define vim_strpbrk(s, cs) (char_u *)strpbrk((char *)(s), (char *)(cs))
  1205. #endif
  1206.  
  1207. #define MSG(s)                msg((char_u *)(s))
  1208. #define MSG_ATTR(s, attr)        msg_attr((char_u *)(s), (attr))
  1209. #define EMSG(s)                emsg((char_u *)(s))
  1210. #define EMSG2(s, p)            emsg2((char_u *)(s), (char_u *)(p))
  1211. #define EMSGN(s, n)            emsgn((char_u *)(s), (long)(n))
  1212. #define OUT_STR(s)            out_str((char_u *)(s))
  1213. #define OUT_STR_NF(s)            out_str_nf((char_u *)(s))
  1214. #define MSG_PUTS(s)            msg_puts((char_u *)(s))
  1215. #define MSG_PUTS_ATTR(s, a)        msg_puts_attr((char_u *)(s), (a))
  1216. #define MSG_PUTS_TITLE(s)        msg_puts_title((char_u *)(s))
  1217. #define MSG_PUTS_LONG(s)        msg_puts_long((char_u *)(s))
  1218. #define MSG_PUTS_LONG_ATTR(s, a)    msg_puts_long_attr((char_u *)(s), (a))
  1219.  
  1220. typedef long        linenr_T;        /* line number type */
  1221. typedef unsigned    colnr_T;        /* column number type */
  1222. typedef unsigned short disptick_T;    /* display tick type */
  1223.  
  1224. #define MAXLNUM (0x7fffffffL)        /* maximum (invalid) line number */
  1225.  
  1226. /*
  1227.  * Well, you won't believe it, but some S/390 machines ("host", now also known
  1228.  * as zServer) us 31 bit pointers. There are also some newer machines, that
  1229.  * use 64 bit pointers. I don't know how to distinguish between 31 and 64 bit
  1230.  * machines, so the best way is to assume 31 bits whenever we detect OS/390
  1231.  * Unix.
  1232.  * With this we restrict the maximum line length to 1073741823. I guess this is
  1233.  * not a real problem. BTW:  Longer lines are split.
  1234.  */
  1235. #if SIZEOF_INT >= 4
  1236. # ifdef __MVS__
  1237. #  define MAXCOL (0x3fffffffL)        /* maximum column number, 30 bits */
  1238. # else
  1239. #  define MAXCOL (0x7fffffffL)        /* maximum column number, 31 bits */
  1240. # endif
  1241. #else
  1242. # define MAXCOL    (0x7fff)        /* maximum column number, 15 bits */
  1243. #endif
  1244.  
  1245. #define SHOWCMD_COLS 10            /* columns needed by shown command */
  1246. #define STL_MAX_ITEM 50            /* max count of %<flag> in statusline*/
  1247.  
  1248. typedef void        *vim_acl_T;        /* dummy to pass an ACL to a function */
  1249.  
  1250. /*
  1251.  * Include a prototype for mch_memmove(), it may not be in alloc.pro.
  1252.  */
  1253. #ifdef VIM_MEMMOVE
  1254. void mch_memmove __ARGS((void *, void *, size_t));
  1255. #else
  1256. # ifndef mch_memmove
  1257. #  define mch_memmove(to, from, len) memmove(to, from, len)
  1258. # endif
  1259. #endif
  1260.  
  1261. /*
  1262.  * fnamecmp() is used to compare file names.
  1263.  * On some systems case in a file name does not matter, on others it does.
  1264.  * (this does not account for maximum name lengths and things like "../dir",
  1265.  * thus it is not 100% accurate!)
  1266.  */
  1267. #ifdef CASE_INSENSITIVE_FILENAME
  1268. # ifdef BACKSLASH_IN_FILENAME
  1269. #  define fnamecmp(x, y) vim_fnamecmp((x), (y))
  1270. #  define fnamencmp(x, y, n) vim_fnamencmp((x), (y), (size_t)(n))
  1271. # else
  1272. #  define fnamecmp(x, y) MB_STRICMP((x), (y))
  1273. #  define fnamencmp(x, y, n) MB_STRNICMP((x), (y), (n))
  1274. # endif
  1275. #else
  1276. # define fnamecmp(x, y) strcmp((char *)(x), (char *)(y))
  1277. # define fnamencmp(x, y, n) strncmp((char *)(x), (char *)(y), (size_t)(n))
  1278. #endif
  1279.  
  1280. #ifdef HAVE_MEMSET
  1281. # define vim_memset(ptr, c, size)   memset((ptr), (c), (size))
  1282. #else
  1283. void *vim_memset __ARGS((void *, int, size_t));
  1284. #endif
  1285.  
  1286. #ifdef HAVE_MEMCMP
  1287. # define vim_memcmp(p1, p2, len)   memcmp((p1), (p2), (len))
  1288. #else
  1289. # ifdef HAVE_BCMP
  1290. #  define vim_memcmp(p1, p2, len)   bcmp((p1), (p2), (len))
  1291. # else
  1292. int vim_memcmp __ARGS((void *, void *, size_t));
  1293. #  define VIM_MEMCMP
  1294. # endif
  1295. #endif
  1296.  
  1297. #ifdef MSWIN
  1298. /* On MS-Windows the third argument isn't size_t.  This matters for Win64,
  1299.  * where sizeof(size_t)==8, not 4 */
  1300. # define vim_read(fd, buf, count)   read((fd), (char *)(buf), (unsigned int)(count))
  1301. # define vim_write(fd, buf, count)  write((fd), (char *)(buf), (unsigned int)(count))
  1302. #else
  1303. # define vim_read(fd, buf, count)   read((fd), (char *)(buf), (size_t) (count))
  1304. # define vim_write(fd, buf, count)  write((fd), (char *)(buf), (size_t) (count))
  1305. #endif
  1306.  
  1307. /*
  1308.  * Enums need a typecast to be used as array index (for Ultrix).
  1309.  */
  1310. #define hl_attr(n)    highlight_attr[(int)(n)]
  1311. #define term_str(n)    term_strings[(int)(n)]
  1312.  
  1313. /*
  1314.  * vim_iswhite() is used for "^" and the like. It differs from isspace()
  1315.  * because it doesn't include <CR> and <LF> and the like.
  1316.  */
  1317. #define vim_iswhite(x)    ((x) == ' ' || (x) == '\t')
  1318.  
  1319. /* Note that gui.h is included by structs.h */
  1320.  
  1321. #include "structs.h"        /* file that defines many structures */
  1322.  
  1323. #ifdef FEAT_MOUSE
  1324.  
  1325. /* Codes for mouse button events in lower three bits: */
  1326. # define MOUSE_LEFT    0x00
  1327. # define MOUSE_MIDDLE    0x01
  1328. # define MOUSE_RIGHT    0x02
  1329. # define MOUSE_RELEASE    0x03
  1330.  
  1331. /* bit masks for modifiers: */
  1332. # define MOUSE_SHIFT    0x04
  1333. # define MOUSE_ALT    0x08
  1334. # define MOUSE_CTRL    0x10
  1335.  
  1336. /* mouse buttons that are handled like a key press (GUI only) */
  1337. # define MOUSE_4    0x100    /* scroll wheel down */
  1338. # define MOUSE_5    0x200    /* scroll wheel up */
  1339.  
  1340. /* 0x20 is reserved by xterm */
  1341. # define MOUSE_DRAG_XTERM   0x40
  1342.  
  1343. # define MOUSE_DRAG    (0x40 | MOUSE_RELEASE)
  1344.  
  1345. /* Lowest button code for using the mouse wheel (xterm only) */
  1346. # define MOUSEWHEEL_LOW        0x60
  1347.  
  1348. # define MOUSE_CLICK_MASK    0x03
  1349.  
  1350. # define NUM_MOUSE_CLICKS(code) \
  1351.     (((unsigned)((code) & 0xC0) >> 6) + 1)
  1352.  
  1353. # define SET_NUM_MOUSE_CLICKS(code, num) \
  1354.     (code) = ((code) & 0x3f) | ((((num) - 1) & 3) << 6)
  1355.  
  1356. /*
  1357.  * jump_to_mouse() returns one of first four these values, possibly with
  1358.  * some of the other three added.
  1359.  */
  1360. # define IN_UNKNOWN        0
  1361. # define IN_BUFFER        1
  1362. # define IN_STATUS_LINE        2    /* on status or command line */
  1363. # define IN_SEP_LINE        4    /* on vertical separator line */
  1364. # define IN_OTHER_WIN        8    /* in other window but can't go there */
  1365. # define CURSOR_MOVED        0x100
  1366. # define MOUSE_FOLD_CLOSE    0x200    /* clicked on '-' in fold column */
  1367. # define MOUSE_FOLD_OPEN    0x400    /* clicked on '+' in fold column */
  1368.  
  1369. /* flags for jump_to_mouse() */
  1370. # define MOUSE_FOCUS        0x01    /* need to stay in this window */
  1371. # define MOUSE_MAY_VIS        0x02    /* may start Visual mode */
  1372. # define MOUSE_DID_MOVE        0x04    /* only act when mouse has moved */
  1373. # define MOUSE_SETPOS        0x08    /* only set current mouse position */
  1374. # define MOUSE_MAY_STOP_VIS    0x10    /* may stop Visual mode */
  1375.  
  1376. # if defined(UNIX) && defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
  1377. #  define CHECK_DOUBLE_CLICK 1    /* Checking for double clicks ourselves. */
  1378. # endif
  1379.  
  1380. #endif /* FEAT_MOUSE */
  1381.  
  1382. /* defines for eval_vars() */
  1383. #define VALID_PATH        1
  1384. #define VALID_HEAD        2
  1385.  
  1386. /* Defines for Vim variables.  These must match vimvars[] in eval.c! */
  1387. #define VV_COUNT    0
  1388. #define VV_COUNT1    1
  1389. #define VV_PREVCOUNT    2
  1390. #define VV_ERRMSG    3
  1391. #define VV_WARNINGMSG    4
  1392. #define VV_STATUSMSG    5
  1393. #define VV_SHELL_ERROR    6
  1394. #define VV_THIS_SESSION    7
  1395. #define VV_VERSION    8
  1396. #define VV_LNUM        9
  1397. #define VV_TERMRESPONSE    10
  1398. #define VV_FNAME    11
  1399. #define VV_LANG        12
  1400. #define VV_LC_TIME    13
  1401. #define VV_CTYPE    14
  1402. #define VV_CC_FROM    15
  1403. #define VV_CC_TO    16
  1404. #define VV_FNAME_IN    17
  1405. #define VV_FNAME_OUT    18
  1406. #define VV_FNAME_NEW    19
  1407. #define VV_FNAME_DIFF    20
  1408. #define VV_CMDARG    21
  1409. #define VV_FOLDSTART    22
  1410. #define VV_FOLDEND    23
  1411. #define VV_FOLDDASHES    24
  1412. #define VV_FOLDLEVEL    25
  1413. #define VV_PROGNAME    26
  1414. #define VV_SEND_SERVER    27
  1415. #define VV_LEN        28    /* number of v: vars */
  1416.  
  1417. #ifdef FEAT_CLIPBOARD
  1418.  
  1419. /* Vim-specific selection type for X11 */
  1420. #define VIM_ATOM_NAME "_VIM_TEXT"
  1421.  
  1422. /* Selection states for modeless selection */
  1423. # define SELECT_CLEARED        0
  1424. # define SELECT_IN_PROGRESS    1
  1425. # define SELECT_DONE        2
  1426.  
  1427. # define SELECT_MODE_CHAR    0
  1428. # define SELECT_MODE_WORD    1
  1429. # define SELECT_MODE_LINE    2
  1430.  
  1431. # ifdef FEAT_GUI_W32
  1432. #  ifdef FEAT_OLE
  1433. #   define WM_OLE (WM_APP+0)
  1434. #  endif
  1435. # endif
  1436.  
  1437. /* Info about selected text */
  1438. typedef struct VimClipboard
  1439. {
  1440.     int        available;    /* Is clipboard available? */
  1441.     int        owned;        /* Flag: do we own the selection? */
  1442.     pos_T    start;        /* Start of selected area */
  1443.     pos_T    end;        /* End of selected area */
  1444.     int        vmode;        /* Visual mode character */
  1445.  
  1446.     /* Fields for selection that doesn't use Visual mode */
  1447.     short_u    origin_row;
  1448.     short_u    origin_start_col;
  1449.     short_u    origin_end_col;
  1450.     short_u    word_start_col;
  1451.     short_u    word_end_col;
  1452.  
  1453.     pos_T    prev;        /* Previous position */
  1454.     short_u    state;        /* Current selection state */
  1455.     short_u    mode;        /* Select by char, word, or line. */
  1456.  
  1457. # if defined(FEAT_GUI_X11) || defined(FEAT_XCLIPBOARD)
  1458.     Atom    sel_atom;    /* PRIMARY/CLIPBOARD selection ID */
  1459. # endif
  1460.  
  1461. # ifdef FEAT_GUI_GTK
  1462.     GdkAtom     gtk_sel_atom;    /* PRIMARY/CLIPBOARD selection ID */
  1463. # endif
  1464.  
  1465. # ifdef MSWIN
  1466.     int_u    format;        /* Vim's own special clipboard format */
  1467. # endif
  1468. # ifdef FEAT_GUI_BEOS
  1469.                 /* no clipboard at the moment */
  1470. # endif
  1471. } VimClipboard;
  1472. #else
  1473. typedef int VimClipboard;    /* This is required for the prototypes. */
  1474. #endif
  1475.  
  1476. #ifdef __BORLANDC__
  1477. /* work around a bug in the Borland 'stat' function: */
  1478. # include <io.h>        /* for access() */
  1479.  
  1480. # define stat(a,b) (access(a,0) ? -1 : stat(a,b))
  1481. #endif
  1482.  
  1483. /*
  1484.  * EXTERN is only defined in main.c.  That's where global variables are
  1485.  * actually defined and initialized.
  1486.  */
  1487. #ifndef EXTERN
  1488. # define EXTERN extern
  1489. # define INIT(x)
  1490. #else
  1491. # ifndef INIT
  1492. #  define INIT(x) x
  1493. #  define DO_INIT
  1494. # endif
  1495. #endif
  1496.  
  1497. #include "option.h"        /* option variables and defines */
  1498. #include "ex_cmds.h"        /* Ex command defines */
  1499. #include "proto.h"        /* function prototypes */
  1500.  
  1501. /* This has to go after the include of proto.h, as proto/gui.pro declares
  1502.  * functions of these names. The declarations would break if the defines had
  1503.  * been seen at that stage.  But it must be before globals.h, where error_ga
  1504.  * is declared. */
  1505. #if !defined(FEAT_GUI_W32) && !defined(FEAT_GUI_X11) \
  1506.     && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_MAC)
  1507. # define mch_errmsg(str)    fprintf(stderr, "%s", (str))
  1508. # define display_errors()    fflush(stderr)
  1509. # define mch_msg(str)        printf("%s", (str))
  1510. #else
  1511. # define USE_MCH_ERRMSG
  1512. #endif
  1513.  
  1514. #include "globals.h"        /* global variables and messages */
  1515.  
  1516. #ifdef FEAT_SNIFF
  1517. # include "if_sniff.h"
  1518. #endif
  1519.  
  1520. #ifndef FEAT_VIRTUALEDIT
  1521. # define getvvcol(w, p, s, c, e) getvcol(w, p, s, c, e)
  1522. # define virtual_active() 0
  1523. #endif
  1524.  
  1525. /*
  1526.  * If console dialog not supported, but GUI dialog is, use the GUI one.
  1527.  */
  1528. #if defined(FEAT_GUI_DIALOG) && !defined(FEAT_CON_DIALOG)
  1529. # define do_dialog gui_mch_dialog
  1530. #endif
  1531.  
  1532. /*
  1533.  * Default filters for gui_mch_browse().
  1534.  * The filters are almost system independent.  Except for the difference
  1535.  * between "*" and "*.*" for MSDOS-like systems.
  1536.  * NOTE: Motif only uses the very first pattern.  Therefore
  1537.  * BROWSE_FILTER_DEFAULT should start with a "*" pattern.
  1538.  */
  1539. #ifdef FEAT_BROWSE
  1540. # ifdef BACKSLASH_IN_FILENAME
  1541. #  define BROWSE_FILTER_MACROS \
  1542.     (char_u *)"Vim macro files (*.vim)\t*.vim\nAll Files (*.*)\t*.*\n"
  1543. #  define BROWSE_FILTER_ALL_FILES (char_u *)"All Files (*.*)\t*.*\n"
  1544. #  define BROWSE_FILTER_DEFAULT \
  1545.     (char_u *)"All Files (*.*)\t*.*\nC source (*.c, *.h)\t*.c;*.h\nC++ source (*.cpp, *.hpp)\t*.cpp;*.hpp\nVB code (*.bas, *.frm)\t*.bas;*.frm\nVim files (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n"
  1546. # else
  1547. #  define BROWSE_FILTER_MACROS \
  1548.     (char_u *)"Vim macro files (*.vim)\t*.vim\nAll Files (*)\t*\n"
  1549. #  define BROWSE_FILTER_ALL_FILES (char_u *)"All Files (*)\t*\n"
  1550. #  define BROWSE_FILTER_DEFAULT \
  1551.     (char_u *)"All Files (*)\t*\nC source (*.c, *.h)\t*.c;*.h\nC++ source (*.cpp, *.hpp)\t*.cpp;*.hpp\nVim files (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n"
  1552. # endif
  1553. #endif
  1554.  
  1555. /* stop using fastcall for Borland */
  1556. #if defined(__BORLANDC__) && defined(WIN32) && !defined(DEBUG)
  1557. # pragma option -p.
  1558. #endif
  1559.  
  1560. #if defined(MEM_PROFILE)
  1561. # define vim_realloc(ptr, size)  mem_realloc((ptr), (size))
  1562. #else
  1563. # define vim_realloc(ptr, size)  realloc((ptr), (size))
  1564. #endif
  1565.  
  1566. /*
  1567.  * The following macros stop displat/event loop nesting at the wrong time.
  1568.  */
  1569. #ifdef ALT_X_INPUT
  1570. # define ALT_INPUT_LOCK_OFF    suppress_alternate_input = FALSE
  1571. # define ALT_INPUT_LOCK_ON    suppress_alternate_input = TRUE
  1572. #endif
  1573.  
  1574. #ifdef FEAT_MBYTE
  1575. /* Maximum number of bytes in a multi-byte character.  It can be one 32-bit
  1576.  * character of up to 6 bytes, or one 16-bit character of up to three bytes
  1577.  * plus two following composing characters of three bytes each. */
  1578. # define MB_MAXBYTES    9
  1579.  
  1580. /*
  1581.  * Return byte length of character that starts with byte "b".
  1582.  * Returns 1 for a single-byte character.
  1583.  * MB_BYTE2LEN_CHECK() can be used to count a special key as one byte.
  1584.  * Don't call MB_BYTE2LEN(b) with b < 0 or b > 255!
  1585.  */
  1586. # define MB_BYTE2LEN(b)        mb_bytelen_tab[b]
  1587. # define MB_BYTE2LEN_CHECK(b)    (((b) < 0 || (b) > 255) ? 1 : mb_bytelen_tab[b])
  1588.  
  1589. /* properties used in enc_canon_table[] (first three mutually exclusive) */
  1590. # define ENC_8BIT    0x01
  1591. # define ENC_DBCS    0x02
  1592. # define ENC_UNICODE    0x04
  1593.  
  1594. # define ENC_ENDIAN_B    0x10        /* Unicode: Big endian */
  1595. # define ENC_ENDIAN_L    0x20        /* Unicode: Little endian */
  1596.  
  1597. # define ENC_2BYTE    0x40        /* Unicode: UCS-2 */
  1598. # define ENC_4BYTE    0x80        /* Unicode: UCS-4 */
  1599. # define ENC_2WORD    0x100        /* Unicode: UTF-16 */
  1600.  
  1601. # define ENC_LATIN1    0x200        /* Latin1 */
  1602.  
  1603. # ifdef USE_ICONV
  1604. /* On Win32 iconv.dll is dynamically loaded. */
  1605. #  ifdef DYNAMIC_ICONV
  1606. #   define ICONV_ERRNO (*iconv_errno())
  1607. #  else
  1608. #   define ICONV_ERRNO errno
  1609. #  endif
  1610. # endif
  1611.  
  1612. #endif
  1613.  
  1614. /* ISSYMLINK(mode) tests if a file is a symbolic link. */
  1615. #if (defined(S_IFMT) && defined(S_IFLNK)) || defined(S_ISLNK)
  1616. # define HAVE_ISSYMLINK
  1617. # if defined(S_IFMT) && defined(S_IFLNK)
  1618. #  define ISSYMLINK(mode) (((mode) & S_IFMT) == S_IFLNK)
  1619. # else
  1620. #  define ISSYMLINK(mode) S_ISLNK(mode)
  1621. # endif
  1622. #endif
  1623.  
  1624. #define SIGN_BYTE 1        /* byte value used where sign is displayed;
  1625.                    attribute value is sign type */
  1626.  
  1627. #if defined(FEAT_GUI) && defined(FEAT_XCLIPBOARD)
  1628. # define X_DISPLAY    (gui.in_use ? gui.dpy : xterm_dpy)
  1629. #else
  1630. # ifdef FEAT_GUI
  1631. #  define X_DISPLAY    gui.dpy
  1632. # else
  1633. #  define X_DISPLAY    xterm_dpy
  1634. # endif
  1635. #endif
  1636.  
  1637. #endif /* VIM__H */
  1638.